Дано целые числа n и k. Обнулите в числе n его
последние k бит и выведите результат. Рекомендуется сделать эту задачу
без использования циклов.
Вход. Два числа n (0 ≤ n ≤ 231 – 1) и k (0 ≤ k ≤ 30).
Выход. Выведите число, полученное в результате обнуления k последних
бит.
Пример входа
5 1
Пример выхода
4
элементарная задача – битовые операции
Анализ алгоритма
Построим маску mask, в которой на последних k позициях будут стоять нули, а на
остальных единицы. Искомый ответ равен
битовой операции “and” входного значения n
и маски mask.
Требуемую маску можно также
получить, сдвинув число -1 (в битовом представлении все единицы) на k позиций влево. после чего k правых бит в нем примут значение 0.
Еще одно решение: можно сдвинуть
число n
на k бит вправо, а затем на k бит влево. То есть ответом будет значение (n >> k) << k.
Реализация алгоритма
Читаем
входные данные.
scanf("%d %d",&n,&k);
Вычисляем и выводим ответ.
n = n &
(~((1 << k) - 1));
printf("%d\n",n);
Реализация второй вариант
#include <stdio.h>
int n, k;
int main(void)
{
scanf("%d
%d",&n,&k);
n = n & (-1 << k);
printf("%d\n",n);
return 0;
}
Реализация третий вариант
#include <stdio.h>
int n, k, t;
int main(void)
{
scanf("%d
%d",&n,&k);
n = (n >> k) << k;
printf("%d\n",n);
return 0;
}